After reading your answers, I was looking for Go gotchas and I find this. 
At the first look it looks promising, do you have opinion on it?

http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/

Best,
Kamil
niedziela, 13 lutego 2022 o 23:58:14 UTC+1 Kamil Ziemian napisał(a):

> Thank you Jason and Axel. I know that "nil" is predeclared identifier from 
> watching talk on YT "Understending nil" (or something like that) and know 
> that it can be redefined. But, due to my background I still struggle with 
> such things in Go. Old habits die hard, nothing more.
>
> Thank you Axel, you points are very helpful to me. They remained me title 
> of ones of Rob Pikes talks about Go "Simplicity is complicated".
>
> Best,
> Kamil
> piątek, 11 lutego 2022 o 21:21:03 UTC+1 axel.wa...@googlemail.com 
> napisał(a):
>
>> FWIW two useful aspects of this design are
>> 1. It makes the language simpler, as we have fewer keywords and the 
>> grammar doesn't need to mention `int`/… everywhere
>> 2. It makes it possible to extend the set of predeclared identifiers, 
>> without worrying about breakages. For example, we are adding a new `any` 
>> predeclared identifier in Go 1.18. This won't break any (hehe) code, as 
>> code which uses that identifier will just refer to the one it already 
>> declares.
>>
>> On Fri, Feb 11, 2022 at 8:38 PM Jason Phillips <jasonrya...@gmail.com> 
>> wrote:
>>
>>> In C and C++[1][2] "int" and "float" are reserved keywords and thus 
>>> can't be used as identifiers. In Go[3], "int" and "float64" are 
>>> "predeclared identifiers"[4] and can be redefined, just like any other 
>>> identifier.
>>>
>>> [1] - https://en.cppreference.com/w/c/keyword
>>> [2] - https://en.cppreference.com/w/cpp/keyword
>>> [3] - https://go.dev/ref/spec#Keywords
>>> [4] - https://go.dev/ref/spec#Predeclared_identifiers
>>>
>>> On Friday, February 11, 2022 at 1:20:37 PM UTC-5 kziem...@gmail.com 
>>> wrote:
>>>
>>>> Hello,
>>>>
>>>> I have so background in C and C++ so was used to that you CAN'T define 
>>>> variable with the name of predefined types. But, in Go 1.17 (go version 
>>>> go1.17.7 linux/amd64)
>>>> > package main
>>>> >
>>>> > import "fmt"
>>>> >
>>>> > func main() {
>>>> >         var int float64 = 2.5
>>>> >
>>>> >         fmt.Printf("int: %v, %T\n", int, int)
>>>> >
>>>> >         // var varOne int = 1
>>>> >
>>>> >         // fmt.Printf("varOne: %v", varOne)
>>>> > }
>>>> this code compile and produce result
>>>> > int: 2.5, float64
>>>>
>>>> When you uncomment two lines in this example you will get error
>>>> > int is not a type
>>>>
>>>> In Go 1.18beta2 (go version go1.18beta2 linux/amd64)
>>>> > package main
>>>> >
>>>> > import (
>>>> >         "fmt"
>>>> >         // "math"
>>>> > )
>>>> >
>>>> > type Constraint interface {
>>>> >         float64
>>>> > }
>>>> >
>>>> > func someFunction[uint8 Constraint](x uint8) uint8 {
>>>> >         x += uint8(1)
>>>> >         return x
>>>> > }
>>>> >
>>>> > func main() {
>>>> >         var x float64 = 1
>>>> >
>>>> >         fmt.Printf("someFunction(%v): %v\n", x, someFunction(x))
>>>> >         fmt.Printf("x type: %T\n", x)
>>>> >         fmt.Printf("someFunction(x) type: %T\n", someFunction(x))
>>>> > }
>>>> this code compile and produce result
>>>> > someFunction(1): 2
>>>> > x type: float64
>>>> > someFunction(x) type: float64
>>>>
>>>> Can anyone tell me why this behavior is possible in Go? In the past I 
>>>> never write "var int int" because it is wicked and possible sinful, but 
>>>> syntax for generic functions make easier for me to produce such evil 
>>>> things.
>>>>
>>>> This is a bit too much shocking things for me for one day, I will be 
>>>> back tomorrow.
>>>>
>>>> Best,
>>>> Kamil
>>>
>>> -- 
>>> 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...@googlegroups.com.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/golang-nuts/78714732-cd31-49cf-a941-2ed228eb2b7fn%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/golang-nuts/78714732-cd31-49cf-a941-2ed228eb2b7fn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>

-- 
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/25d885e9-3ab9-47bd-8c0c-43ac99721132n%40googlegroups.com.

Reply via email to