The compiler will know this is a string without me explicitly saying
func (u User) hi() {}
To return to rust land this is a function that implements User. In OOP land we would say that this function belongs to the user class. In Go, just like in rust we don't say if a function returns void so this function is for User objects and doesn't return anything:
func (u User) hi(s string) string {}
If it took in a string and returned a string it would look like this.
map[string] int {}
I will give you that this syntax is a bit odd but this is just a hashmap/dictionary where the key is a string and the value is an int