It's not memory safe.
There is some compile time safety and some runtime safety, but it's not comprehensive.
Nullable pointers are handled by the type system at compile time.
Integer wrapping (signed or unsigned) will crash at runtime, unless you use explicit wrapping operators.
Array out of bounds will crash at runtime for slices.
There is no direct pointer arithmetic, but you can convert a pointer to a slice, and then index into the slice (which has array bounds checking). This is an example where the language is unsafe but it sort of guides the programmer into writing safe code.