Thanks for the clarification, Brian!

On Monday, April 13, 2020 at 2:56:49 PM UTC+6, Brian Candler wrote:
>
> On Sunday, 12 April 2020 18:12:16 UTC+1, Tanmay Das wrote:
>>
>> this is not my first statically typed language, I know a little bit of C 
>> and Java. I was under the impression that Go is capable of some dynamic 
>> behavior. Maybe things like Go's type inference, duck typing, empty 
>> interface{} led me to believe that. All these type-related bindings can be 
>> resolved at compile-time. So I was thinking, if the compiler can do some 
>> extra work for resolving the types, maybe it could add a few more steps to 
>> keep track of which function to call when an undefined method is accessed.
>
>
> There's no type inference in go, except for defining a variable and 
> initializing it from an expression at the same time:
>
>     v := foo()
>
> In this case you don't need to declare the type of v, because it's implied 
> from the return type of foo.
>
> The nearest to dynamic typing (and indeed duck typing) is interfaces.  You 
> can define an interface such as:
>
>     type Foo interface {
>         Bar()
>     }
>
> and then declare a variable of that type:
>
>     var v Foo
>
> When you later assign something to var v, you can only assign a value of 
> some type which includes the Bar() method.  This is statically enforced (at 
> compile time): you simply can't write a program which assigns a value which 
> doesn't have the Bar() method.
> https://play.golang.org/p/hYZNPx0L187
>
> Note that the types you create which include a Bar() method *don't* need 
> to declare that they implement the Foo interface; this is implicit by the 
> fact that they have the correct methods, which makes it rather like 
> duck-typing.
>
> Interfaces with only a single method are very common, since the same 
> object can implement many different interfaces if required.
>
> This feature gives a huge amount of flexibility.  For example, the 
> io.Reader <https://tour.golang.org/methods/21> interface is simple but 
> pervasive.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/8f14c163-eb86-458d-a410-ffca37204fe4%40googlegroups.com.

Reply via email to